#include <bitset>
#include <string>

using namespace std;

int main()
{
    bitset<32> bitvec(1U); // 32位；低位为 1，其他位为 0

    // bitvec1 比初始值小；初始值中的高位被丢弃
    bitset<13> bitvec1(0xbeef);     // 二进制位序列为 1111011101111
    // bitvec2 比初始值大；它的高位被置为 0
    bitset<20> bitvec2(0xbeef);     // 二进制位序列为 00001011111011101111
    // 在 64 位机器中，long long 0ULL 是个 64 个 0 比特，因此 ~0ULL 是 64 个 1
    bitset<128> bitvec3(~0ULL);     // 0~63 位为 1；63~127 位为 0

    bitset<32> bitvec4("1100");     // 2、3 两位为 1，剩余两位为 0

    string str("1111111000000011001101");
    bitset<32> bitvec5(str, 5, 4);  // 从 str[5] 开始的四个二进制位，1100
    bitset<32> bitvec6(str, str.size() - 4); // 使用最后四个字符
}